package dayPractice;

import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * 某小学最近得到了一笔赞助，打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。
 *
 * 期末，每个学生都有3门课的成绩:语文、数学、英语。
 *
 * 先按总分从高到低排序，如果两个同学总分相同，再按语文成绩从高到低排序，如果两个同学总分和语文成绩都相同，那么规定学号小的同学排在前面，这样，每个学生的排序是唯一确定的。
 *
 * 任务：先根据输入的3门课的成绩计算总分，然后按上述规则排序，最后按排名顺序输出前五名名学生的学号和总分。
 *
 * 注意，在前5名同学中，每个人的奖学金都不相同，因此，你必须严格按上述规则排序。
 *
 * https://www.acwing.com/problem/content/description/431/
 * @author Summerday
 */
public class Main429多关键字排序 {

    static int n;
    static int[][] nums;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        nums = new int[n][4];
        for (int i = 0; i < n; i++) {
            nums[i][0] = sc.nextInt();
            nums[i][1] = sc.nextInt();
            nums[i][2] = sc.nextInt();
            nums[i][3] = i + 1;
        }

        Arrays.sort(nums, (o1, o2) -> {
            int s1 = o1[0] + o1[1] + o1[2];
            int s2 = o2[0] + o2[1] + o2[2];
            if (s1 != s2) return s2 - s1; // 总分大的在前面
            if (o1[0] != o2[0]) return o2[0] - o1[0]; // 语文成绩大的在前面
            return o1[3] - o2[3]; // 学号小的在前面
        });

        for (int i = 0; i < 5; i++) {
            int[] s = nums[i];
            System.out.println(s[3] + " " + (s[0] + s[1] + s[2]));
        }
    }
}
